using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace DataBaseManagement
{
     
    public class UsuariosNG
    {
        const string ArquivoXMLAlunos = @"usuarios.xml";
        public static string nomeArquivoAlunos
        {
            get
            {   String aPath;
                String aName;
                aName = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;

                aPath = System.IO.Path.GetDirectoryName(aName);

                return Path.Combine(aPath, ArquivoXMLAlunos);
            }
        }
        static Usuarios _ListaUsuarios = null;
        public static Usuarios ListaUsuarios
        {
            get
            {
                if (_ListaUsuarios == null)
                {
                    _ListaUsuarios = new Usuarios();
                    if (!File.Exists(nomeArquivoAlunos))
                    {
                        SalvarBD();
                    }
                    _ListaUsuarios.ReadXml(nomeArquivoAlunos);
                }
                return _ListaUsuarios;
            }
        }
        public static Usuarios.AlunosRow ObterAlunoPorMatricula(string matricula)
        {
            return ListaUsuarios.Alunos.FindByMatricula(matricula);
        }
        public static Usuarios.AlunosRow SalvarAluno(Usuarios.AlunosRow aluno, Boolean salvar)
        {
            decimal nota = -1;
            if ( ! aluno.IsNotaNull() )
                nota = aluno.Nota;
            return SalvarAluno(aluno.Matricula, aluno.Nome, aluno.Matricula, aluno.Login, aluno.Senha, aluno.NomeDoBanco, nota.ToString(), salvar);
        }
        public static Usuarios.AlunosRow SalvarAluno(string matriculaAntiga, string nome, string matricula, string login, string senha, string nomeDoBanco, string nota)
        {
            return SalvarAluno(matriculaAntiga, nome, matricula, login, senha, nomeDoBanco, nota, true);
        }

        public static Usuarios.AlunosRow SalvarAluno(string matriculaAntiga, string nome, string matricula, string login, string senha, string nomeDoBanco, string nota, Boolean persistir)
        {
            Usuarios.AlunosRow aluno = ObterAlunoPorMatricula(matriculaAntiga);
            if (string.IsNullOrEmpty(matriculaAntiga))
            {
                aluno = ListaUsuarios.Alunos.NewAlunosRow();
            }
            aluno.Matricula = matricula;
            aluno.Login = login;
            aluno.Nome = nome;
            aluno.NomeDoBanco = nomeDoBanco;
            aluno.Senha = senha;
            if (string.IsNullOrEmpty(nota))
            {
                aluno.SetNotaNull();
            }
            else
            {
                aluno.Nota = Convert.ToDecimal(nota);
            }
            if (string.IsNullOrEmpty(matriculaAntiga))
            {
                ListaUsuarios.Alunos.AddAlunosRow(aluno);
            }
            if ( persistir )
                SalvarBD();
            return aluno;
        }

        public static Usuarios.AlunosRow EnviarArquivoAluno(string matricula, byte[] Arquivo, string CaminhoCompletoArquivo, bool ehOCorrigido)
        {
            Usuarios.AlunosRow aluno = ObterAlunoPorMatricula(matricula);
            if (aluno == null)
                return null;
            if (!ehOCorrigido)
            {
                aluno.Arquivo = Arquivo;
                aluno.HashMD5Arquivo = Negocio.CalcularHashMD5(aluno.Arquivo);
                aluno.NomeArquivo = Path.GetFileName(CaminhoCompletoArquivo);
                aluno.PathFile = CaminhoCompletoArquivo;
            }
            else
            {
                aluno.ArquivoCorrigido = Arquivo;
                aluno.HashMD5ArquivoCorrigido = Negocio.CalcularHashMD5(aluno.ArquivoCorrigido);
                aluno.NomeArquivoCorrigido = Path.GetFileName(CaminhoCompletoArquivo);
                aluno.PathFileCorrigido = CaminhoCompletoArquivo;
            }
            return aluno;
        }

        public static bool ApagarAluno(string matricula)
        {
            Usuarios.AlunosRow aluno = ObterAlunoPorMatricula(matricula);
            if (matricula == null)
            {
                return false;
            }
            aluno.Delete();
            SalvarBD();
            return true;
        }


        public static void SalvarBD()
        {
            ListaUsuarios.WriteXml(nomeArquivoAlunos);
            ListaUsuarios.AcceptChanges();
        }


        public static object ObterAlunos()
        {
            return ListaUsuarios;
        }

        internal static void ApagarArquivoAluno(string matricula, bool EhOCorrigido)
        {
            Usuarios.AlunosRow aluno = ObterAlunoPorMatricula(matricula);
            if (!EhOCorrigido)
            {
                aluno.SetArquivoNull();
                aluno.NomeArquivo = "";
                aluno.PathFile = "";
                aluno.HashMD5Arquivo = "";
            }
            else
            {
                aluno.SetArquivoCorrigidoNull();
                aluno.NomeArquivoCorrigido = "";
                aluno.PathFileCorrigido = "";
                aluno.HashMD5ArquivoCorrigido = "";
            }
            SalvarBD();
        }
    }
}
